import { ESGeoLineString } from "earthsdk3";
import { HasOwner, react } from "earthsdk3";
import { LonLatBoundingBox } from "../../dataTypes";
import { MyProjectManager } from "../../MyProjectManager";

export class PolylinesWrapper extends HasOwner<MyProjectManager> {

    // 显隐
    private _show = this.dv(react<boolean>(false));
    get show() { return this._show.value; }
    get showChanged() { return this._show.changed; }
    set show(value: boolean) { this._show.value = value; }

    // 顶部四条线
    private _topLines = this.dv(this.owner.createSceneObject(ESGeoLineString) as ESGeoLineString)
    get topLines() { return this._topLines; }

    // 中间四条线
    private _center1Line = this.dv(this.owner.createSceneObject(ESGeoLineString) as ESGeoLineString)
    get center1Line() { return this._center1Line; }
    private _center2Line = this.dv(this.owner.createSceneObject(ESGeoLineString) as ESGeoLineString)
    get center2Line() { return this._center2Line; }
    private _center3Line = this.dv(this.owner.createSceneObject(ESGeoLineString) as ESGeoLineString)
    get center3Line() { return this._center3Line; }
    private _center4Line = this.dv(this.owner.createSceneObject(ESGeoLineString) as ESGeoLineString)
    get center4Line() { return this._center4Line; }

    // 底部四条线
    private _bottomLines = this.dv(this.owner.createSceneObject(ESGeoLineString) as ESGeoLineString)
    get bottomLines() { return this._bottomLines; }

    // 设置折线
    setLines(lonLatboundingbox: LonLatBoundingBox) {
        const { minX, maxX, minY, maxY, minZ, maxZ, } = lonLatboundingbox as LonLatBoundingBox

        const p1LeftTop = [minX, maxY, maxZ] as [number, number, number]
        const p1LeftBottom = [minX, maxY, minZ] as [number, number, number]

        const p1RightTop = [maxX, maxY, maxZ] as [number, number, number]
        const p1RightBottom = [maxX, maxY, minZ] as [number, number, number]

        const p2LeftTop = [minX, minY, maxZ] as [number, number, number]
        const p2LeftBottom = [minX, minY, minZ] as [number, number, number]

        const p2RightTop = [maxX, minY, maxZ] as [number, number, number]
        const p2RightBottom = [maxX, minY, minZ] as [number, number, number]

        // 设置点位
        this.topLines.points = [p1LeftTop, p1RightTop, p2RightTop, p2LeftTop, p1LeftTop]
        this.center1Line.points = [p1LeftTop, p1LeftBottom]
        this.center2Line.points = [p1RightTop, p1RightBottom]
        this.center3Line.points = [p2LeftTop, p2LeftBottom]
        this.center4Line.points = [p2RightTop, p2RightBottom]
        this.bottomLines.points = [p1LeftBottom, p1RightBottom, p2RightBottom, p2LeftBottom, p1LeftBottom]

        // 设置颜色
        const color = [0.9019607843137255, 0.054901960784313725, 0.054901960784313725, 1] as [number, number, number, number]
        this.topLines.strokeColor = color
        this.center1Line.strokeColor = color
        this.center2Line.strokeColor = color
        this.center3Line.strokeColor = color
        this.center4Line.strokeColor = color
        this.bottomLines.strokeColor = color

        // 设置线宽
        const strokeWidth = 2
        this.topLines.strokeWidth = strokeWidth
        this.center1Line.strokeWidth = strokeWidth
        this.center2Line.strokeWidth = strokeWidth
        this.center3Line.strokeWidth = strokeWidth
        this.center4Line.strokeWidth = strokeWidth
        this.bottomLines.strokeWidth = strokeWidth
    }

    clearLines() {
        this.topLines.points = []
        this.center1Line.points = []
        this.center2Line.points = []
        this.center3Line.points = []
        this.center4Line.points = []
        this.bottomLines.points = []
    }


    constructor(owner: MyProjectManager) {
        super(owner);
        {
            const updata = () => {
                this.topLines.show = this.show

                this.center1Line.show = this.show
                this.center2Line.show = this.show
                this.center3Line.show = this.show
                this.center4Line.show = this.show

                this.bottomLines.show = this.show
            }
            updata()
            this.dispose(this.showChanged.don(updata))
        }

    }
}















